package com.itheima.d2_jdk8;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/*
目标：JDK8日期类LocalDateTime、LocalDate、LocalTime常用方法
 */
public class Demo1 {
    public static void main(String[] args) {
        //1、获取本地日期和时间对象。
        //1.1 获取系统当前日期对象
        LocalDate ldNow = LocalDate.now();
        System.out.println(ldNow);

        //1.2 获取系统当前时间对象
        LocalTime ltNow = LocalTime.now();
        System.out.println(ltNow);

        //1.3 获取系统当前日期时间对象
        LocalDateTime ldtNow = LocalDateTime.now();
        System.out.println(ldtNow);

        //1.4 获取2020年5月20日的日期对象
        LocalDate ld = LocalDate.of(2020, 5, 20);
        System.out.println(ld);

        //1.5 获取13点14分20秒的时间对象
        LocalTime lt = LocalTime.of(13, 14, 20);
        System.out.println(lt);

        //1.6 获取 2020年5月20日 13点14分20秒的日期时间对象
        LocalDateTime ldt = LocalDateTime.of(2020, 5, 20, 13, 14, 20);
        System.out.println(ldt);
        System.out.println("-----------------");

        // 2、可以获取日期和时间的全部信息（年、月、日、时、分、秒、年中的天、星期几）
        //2.1 获取ldNow当前日期对象的年、月、日
        int year = ldNow.getYear();
        int monthValue = ldNow.getMonthValue();
        int dayOfMonth = ldNow.getDayOfMonth();
        System.out.println("年：" + year + "，月：" + monthValue + "，日：" + dayOfMonth);

        //2.2 获取ltNow当前时间对象的时、分、秒
        int hour = ltNow.getHour();
        int minute = ltNow.getMinute();
        int second = ltNow.getSecond();
        System.out.println("时：" + hour + "，分：" + minute + "，秒：" + second);

        //2.3 获取ldtNow当前日期时间对象的年、月、日、时、分、秒
        year = ldtNow.getYear();
        monthValue = ldtNow.getMonthValue();
        dayOfMonth = ldtNow.getDayOfMonth();
        hour = ldtNow.getHour();
        minute = ldtNow.getMinute();
        second = ldtNow.getSecond();
        System.out.println("-----------------");

        // 3、修改时间信息：withYear withMonth withDayOfMonth withDayOfYear withHour withMinute withSecond withNano
        //3.1 修改ldtNow对象的年为2023年
        LocalDateTime newLdt = ldtNow.withYear(2023);
        //注意：LocalDate、LocalTime、LocalDateTime他们都是不可变的对象，所以修改后会返回新的对象，原来对象时间没有改
        year = newLdt.getYear();
        System.out.println("修改后的年：" + year);

        //3.2 修改月为3月
        newLdt = ldtNow.withMonth(3);
        monthValue = newLdt.getMonthValue();
        System.out.println("修改后的月：" + monthValue);
        System.out.println("-----------------");

        // 4、加多少: plusYears  plusMonths plusDays plusWeeks plusHours plusMinutes plusSeconds plusNanos
        //4.1 将ldtNow日期时间对象的年加1年，结果应该是2025年
        LocalDateTime newLdtNow = ldtNow.plusYears(1);
        year = newLdtNow.getYear();
        System.out.println("加1年后的年：" + year);

        //4.2 将ldtNow日期时间对象的年减1年，结果是2023年
        newLdtNow = ldtNow.plusYears(-1);
        year = newLdtNow.getYear();
        System.out.println("减1年后的年：" + year);
        System.out.println("-----------------");

        // 5、减多少：minusDays minusYears minusMonths minusWeeks minusHours minusMinutes minusSeconds minusNanos
        //5.1 将ldtNow日期时间对象的月减2月
        newLdtNow = ldtNow.minusMonths(2);
        monthValue = newLdtNow.getMonthValue();
        System.out.println("减2月后的月：" + monthValue);

        //5.2 将ldtNow日期时间对象的月加2月
        newLdtNow = ldtNow.minusMonths(-2);
        monthValue = newLdtNow.getMonthValue();
        System.out.println("加2月后的月：" + monthValue);
        System.out.println("-----------------");

        // 6、获取指定日期和时间的LocalDateTime对象：2029年12月12日12时12分12秒、 2029年12月12日12时12分12秒
        LocalDateTime ldt1 = LocalDateTime.of(2029, 12, 12, 12, 12, 12);
        LocalDateTime ldt2 = LocalDateTime.of(2029, 12, 12, 12, 12, 12);
        //判断2个日期、时间对象，所表示的时间是否相等，在前还是在后： equals、isBefore、isAfter
        boolean result = ldt1.equals(ldt2);
        System.out.println("ldt1和ldt2具备的日期时间信息是否相同：" + result);
        result = ldt1.isBefore(ldt2);
        System.out.println("ldt1的日期时间信息是否在ldt2之前：" + result);
        result = ldt1.isAfter(ldt2);
        System.out.println("ldt1的日期时间信息是否在ldt2之后：" + result);
        System.out.println("-----------------");

        // 7、可以把LocalDateTime转换成LocalDate和LocalTime
        LocalDate newLd = ldt.toLocalDate();
        LocalTime newLt = ldt.toLocalTime();
    }
}
